package com.example.lianghangbing.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Func0;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        View button = findViewById(R.id.async_task);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startAsyncTask();
            }
        });
    }

    private void startAsyncTask() {
        Observable.range(4,4).subscribe(new Subscriber<Integer>() {
            @Override
            public void onNext(Integer item) {
                System.out.println("Next: " + item);
            }

            @Override
            public void onError(Throwable error) {
                System.err.println("Error: " + error.getMessage());
            }

            @Override
            public void onCompleted() {
                System.out.println("Sequence complete.");
            }
        });

        //========================== range ==========================
//        Observable.range(4,4).repeat(3).subscribe(new Subscriber<Integer>() {
//            @Override
//            public void onNext(Integer item) {
//                System.out.println("Next: " + item);
//            }
//
//            @Override
//            public void onError(Throwable error) {
//                System.err.println("Error: " + error.getMessage());
//            }
//
//            @Override
//            public void onCompleted() {
//                System.out.println("Sequence complete.");
//            }
//        });

        //========================== just ==========================
//        Observable.just(1, 2, 3)
//                .subscribe(new Subscriber<Integer>() {
//                    @Override
//                    public void onNext(Integer item) {
//                        System.out.println("Next: " + item);
//                    }
//
//                    @Override
//                    public void onError(Throwable error) {
//                        System.err.println("Error: " + error.getMessage());
//                    }
//
//                    @Override
//                    public void onCompleted() {
//                        System.out.println("Sequence complete.");
//                    }
//                });

        //========================== interval ==========================
//        Observable myObservable = Observable.interval(1,TimeUnit.SECONDS);
//        myObservable.subscribe(new Observer<Long>() {
//                    @Override
//                    public void onCompleted() {
//                        System.out.println("onCompleted");
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        System.out.println("onError");
//                    }
//
//                    @Override
//                    public void onNext(Long aLong) {
//                        System.out.println("onNext");
//                    }
//                });
        //========================== from ==========================
//        Integer[] items = { 0, 1, 2, 3, 4, 5 };
//        Observable myObservable = Observable.from(items);
//
//        myObservable.subscribe(
//                new Action1<Integer>() {
//                    @Override
//                    public void call(Integer item) {
//                        System.out.println(item);
//                    }
//                },
//                new Action1<Throwable>() {
//                    @Override
//                    public void call(Throwable error) {
//                        System.out.println("Error encountered: " + error.getMessage());
//                    }
//                },
//                new Action0() {
//                    @Override
//                    public void call() {
//                        System.out.println("Sequence complete");
//                    }
//                }
//        );

        //========================== defer ==========================
//        Observable.defer(new Func0<Observable<Integer>>() {
//            @Override
//            public Observable<Integer> call() {
//                return Observable.just(10);
//            }
//        }).subscribe(new Observer<Integer>() {
//            @Override
//            public void onCompleted() {
//                System.out.println("onCompleted");
//            }
//
//            @Override
//            public void onError(Throwable e) {
//                System.out.println("onError");
//            }
//
//            @Override
//            public void onNext(Integer num) {
//                System.out.println("onNext" + num);
//            }
//        });

        //========================== timer ==========================
//        Observable
//                .timer(1, TimeUnit.SECONDS)
//                .subscribe(new Observer<Long>() {
//                    @Override
//                    public void onCompleted() {
//                        System.out.println("onCompleted");
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        System.out.println("onError");
//                    }
//
//                    @Override
//                    public void onNext(Long aLong) {
//                        System.out.println("onNext");
//                    }
//                });

        //========================== create ==========================
//        Observable.create(new Observable.OnSubscribe<Integer>() {
//            @Override
//            public void call(Subscriber<? super Integer> observer) {
//                try {
//                    if (!observer.isUnsubscribed()) {
//                        for (int i = 1; i < 5; i++) {
//                            observer.onNext(i);
//                        }
//                        observer.onCompleted();
//                    }
//                } catch (Exception e) {
//                    observer.onError(e);
//                }
//            }
//        }).subscribe(new Subscriber<Integer>() {
//            @Override
//            public void onNext(Integer item) {
//                System.out.println("Next: " + item);
//            }
//
//            @Override
//            public void onError(Throwable error) {
//                System.err.println("Error: " + error.getMessage());
//            }
//
//            @Override
//            public void onCompleted() {
//                System.out.println("Sequence complete.");
//            }
//        });
    }

}
